package cool.houge.pig;

import java.time.Duration;
import java.util.List;
import java.util.regex.Pattern;
import lombok.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.ConstructorBinding;

/**
 * 应用配置.
 *
 * @author KK (kzou227@qq.com)
 */
@ConfigurationProperties("pig")
@ConstructorBinding
@Value
public class PigProps {

  /** 令牌配置. */
  private Token token;
  /** Web 回调配置. */
  private List<Webhook> webhooks;
  /** 注册配置. */
  private Register register;
  /** 微信相关配置. */
  private Weixin weixin;

  @Value
  public static class Token {
    /** 访问令牌过期时间. */
    private Duration accessTokenExpireDuration;
    /** 刷新令牌过期时间. */
    private Duration refreshTokenExpireDuration;
  }

  @Value
  public static class Webhook {
    /** 回调的名称. */
    private String name;
    /** 回调类型匹配模式. */
    private Pattern typePattern;
    /** 回调地址. */
    private String url;
    /** 访问键. */
    private String accessKey;
    /** 成功的状态. */
    private int successStatus;
    /** 是否忽略失败. */
    private boolean ignoreFailed;
  }

  @Value
  public static class Register {
    /** 邮箱激活配置. */
    private MailActivation mailActivation;
  }

  @Value
  public static class MailActivation {
    /** 是否启用邮件激活验证. */
    private boolean enabled;
    /** 激活邮件标题. */
    private String title;
    /** 激活邮件的回调URL. */
    private String url;
    /** 加密密码. */
    private String encryptPassword;
    /** 加密盐. */
    private String encryptSlat;
    /** 验证码过期时间. */
    private Duration expireDuration;
    /** 邮件的 SMTP 配置. */
    private SmtpServer smtpServer;
  }

  @Value
  public static class Weixin {
    /** 微信 jscode2session 接口地址配置. */
    private String jscode2sessionUrl;
  }

  @Value
  public static class SmtpServer {
    /** 主机. */
    private String host;
    /** 端口. */
    private Integer port;
    /** 用户名. */
    private String username;
    /** 密码. */
    private String password;
  }
}
